#pragma once
#include "VKValidLayersAndExts.h"
#include "VKInstance.h"
#include "VKDevice.h"
#include "VKSwapChain.h"
#include "VKRenderPass.h"
#include "VKCommandBuffer.h"
#include "VKSemaphoreAndFence.h"
#include "VKSurface.h"
#include "math/Vector3.h"

#ifdef _DEBUG
const bool isValidationLayersEnabled = true;
#else
const bool isValidationLayersEnabled = false;
#endif // _DEBUG

class VKContext
{
public:
	static void InitVulkan(SDL_Window* window);
	static void DestroyVulkan();

	static void DrawBegin(Vector3 clearValue);
	static void DrawEnd();

	static VKValidLayersAndExts* m_VulkanValLayersAndExt;
	static VKInstance* m_VKInstance;
	static VKSurface* m_VKSurface;
	static VKDevice* m_VKDevice;
	static VKSwapChain* m_VKSwapChain;
	static VKRenderPass* m_VKRenderPass;
	static VKCommandBuffer* m_VKCommandBuffer;

	static uint32_t m_VulkanImageIndex;
	static VkCommandBuffer m_VulkanCurrentCommandBuffer;
private:
	VKContext() {}
	static VKSemaphoreAndFence* m_VKSemaphoreAndFence;
};

